package api_models

import (
	"longmen/server/pkg/db/mysql/models/models_main"
	"time"
)

type IsLogin struct {
	Platform int `json:"platform"` //'0-Web 1-iOS 2-Android'
}

type SendCodeReq struct {
	SendVerifyCodeReq
	NationCode int `json:"nation_code"` //国家代码
}

type CheckVerifyCodeReq struct {
	Mobile  string `json:"mobile" validate:"required" example:"13965651818"`
	Smscode string `json:"smscode" validate:"required,max=6,min=6" example:"999999"`
}

type SendVerifyCodeReq struct {
	Mobile         string `json:"mobile" validate:"required" example:"13965651818"`
	IsChangeMobile int    `json:"is_change_mobile" example:"1"` //0-不是,1-是
	IsRegister     int    `json:"is_register" `                 //0-不是,1-是
}

type RreRegisterResp struct {
	MobileHash string `json:"mobile_hash"`
}

type RegisterReq struct {
	Account     string      `json:"account" validate:"required,min=6,max=18"` // 用户名，"非手机号"
	Pwd         string      `json:"pwd"`                                      // 密码注册必填
	MobileHash  string      `json:"mobile_hash" validate:"required"`          //手机号hash
	Platform    int         `json:"platform"`                                 // 0-web 1-ios  2-安卓
	Sex         int         `json:"sex"`                                      // 0=未知，1=男，2=女
	RegSourceId interface{} `json:"reg_source_id"`                            //注册来源，查配置表

	Website    string `json:"website"`     //网址，pc专用
	DeviceInfo string `json:"device_info"` //设备信息
	InviteCode string `json:"invite_code"` // 注册推荐码
	AnchorId   int64  `json:"anchor_id"`   // 来源直播间
}

type SimpleRegisterReq struct {
	Account     string      `json:"account" validate:"required,min=6,max=18"` // 用户名，"非手机号"
	Pwd         string      `json:"pwd" validate:"required"`                  // 密码注册必填
	Platform    int         `json:"platform"`                                 // 0-web 1-ios  2-安卓
	Sex         int         `json:"sex"`                                      // 0=未知，1=男，2=女
	RegSourceId interface{} `json:"reg_source_id"`                            //注册来源，查配置表

	Website    string `json:"website"`     //网址，pc专用
	DeviceInfo string `json:"device_info"` //设备信息
	InviteCode string `json:"invite_code"` // 注册推荐码
	AnchorId   int64  `json:"anchor_id"`   // 来源直播间
}

type GetUserBasicInfoReq struct {
	Id  int `json:"id"`
	Uid int `json:"uid"`
}

type GiftProfitReq struct {
	PageParam
}

type MomentProfitReq struct {
	PageParam
}

type GetLiveLogReq struct {
	PageParam
}

type GetManagedRoomsReq struct {
	PageParam
}

type MomentProfitResp struct {
	models_main.UserProfit
}

type GetManagedRoomsResp struct {
	Anchor
}

type GetUserBasicInfoResp struct {
	Token           string                  `json:"token"`
	TokenWeb        string                  `json:"token_web" gorm:"type:varchar(255)"`
	Account         string                  `json:"account" gorm:"type:varchar(255)"`
	OnlineStatus    int                     `json:"online_status"`
	Gold            int                     `json:"gold"`
	Diamond         int                     `json:"diamond"`
	DiamondTotal    int                     `json:"diamond_total"`
	Point           int                     `json:"point"`
	AnchorPoint     int                     `json:"anchor_point"`
	Status          int                     `json:"status"`
	SharingRatio    int                     `json:"sharing_ratio"`
	Guildid         int                     `json:"guildid"`
	Agentid         int                     `json:"agentid"`
	RecWeight       int                     `json:"rec_weight"`
	CallReciveCount int                     `json:"call_recive_count"`
	CallAcceptCount int                     `json:"call_accept_count"`
	AuthTime        *time.Time              `json:"auth_time"`
	RegistTime      time.Time               `json:"regist_time"`
	LastLogin       time.Time               `json:"last_login"`
	LastOnline      *time.Time              `json:"last_online"`
	LoginPlatform   int                     `json:"login_platform"`
	Profile         models_main.UserProfile `json:"profile"`
	AttentCount     int                     `json:"attent_count"`
	FansCount       int                     `json:"fans_count"`
	GiftSpend       int                     `json:"gift_spend"`
	VisitorCount    int                     `json:"visitor_count"`
	Isattent        int                     `json:"isattent"`
}

type LoginReq struct {
	Account       string `json:"account" validate:"required"`              //手機號或帳號
	Pwd           string `json:"pwd" validate:"required"`                  //密碼/验证码
	LoginType     int    `json:"login_type" validate:"required"`           //1账号登录 2验证码登录
	LoginPlatform int    `json:"platform" validate:"required"`             // web-0; ios-1; android-2
	Ip            string `protobuf:"bytes,5,opt,name=ip,proto3" json:"ip"` //IP地址
	SourceId      int    `json:"source_id"`                                //登陆来源int
	SourceKey     string `json:"source_key"`                               //登陆来源, string
	Website       string `json:"website"`
}

type LoginResp struct {
	models_main.User
	AttentCount  int                      `json:"attent_count"`
	FansCount    int                      `json:"fans_count"`
	GiftSpend    int                      `json:"gift_spend"`
	VisitorCount int                      `json:"visitor_count"`
	MomentCount  int                      `json:"moment_count"`
	TximSign     string                   `json:"txim_sign"`
	Profile      models_main.UserProfile  `json:"profile"`
	OutTags      []*models_main.ConfigTag `json:"tags"`
	BindQq       string                   `json:"bind_qq"`
	BindWeChat   string                   `json:"bind_we_chat"`
	Agent        string                   `json:"agent"` // 邀请码
}

type LoginRespSimplifiedRedirectResp struct {
	MobileHash string `json:"mobile_hash"` //手机号HASH值
}
type GetUserInfoResp struct {
	LoginResp
	Address    *models_main.UserAddress `json:"address"`     //收貨地址4
	InviteCode string                   `json:"invite_code"` //邀请码
}

type RegisterResp struct {
	LoginResp
}

type EditUserInfoReq struct {
	AvatarId      int    `json:"avatarId"`      //默认头像id
	NickName      string `json:"nick_name"`     //昵称
	Age           int    `json:"age"`           //年纪
	Sex           int    `json:"sex"`           //0=未知，1=男，2=女
	Career        string `json:"career"`        //职业
	Height        int    `json:"height"`        //身高 cm
	Weight        int    `json:"weight"`        //体重 kg
	City          string `json:"city"`          //城市
	Constellation string `json:"constellation"` //星座
	Signature     string `json:"signature"`     //个性签名
	SmsCode       string `json:"code"`          //手机号验证码
}

type GetTempUserKeyReq struct {
	TempUid string `json:"temp_uid" validate:"required"`
}

type ForgetPwdReq struct {
	Mobile  string `json:"mobile" validate:"required"`           //手機號
	Pwd     string `json:"pwd" validate:"required,min=6,max=18"` //新密碼
	Smscode string `json:"smscode" validate:"required"`          //驗證碼
}

type ChangePwdReq struct {
	Smscode string `json:"smscode" validate:"required"`          //驗證碼
	Pwd     string `json:"pwd" validate:"required,min=6,max=18"` //新密碼
}

type AddBankReq struct {
	Bank    string `json:"bank" validate:"required"`    //银行名称
	Name    string `json:"name" validate:"required"`    //用户姓名
	Card    string `json:"card" validate:"required"`    //银行卡号
	IdCard  string `json:"id_card" validate:"required"` //身份证号
	Smscode string `json:"smscode" validate:"required"` //验证码
}

type ChangeMobileReq struct {
	OriSmsCode string `json:"ori_sms_code" validate:"required"` //原手機號驗證碼
	NewMobile  string `json:"new_mobile" validate:"required"`   //新手機號
	NewSmscode string `json:"new_smscode" validate:"required"`  //新手機號驗證碼
}

type ChangeQqAndWxReq struct {
	QqUnionid string `json:"qq_unionid" validate:"required"` //QQ
	WxUnionid string `json:"wx_unionid" validate:"required"` //Wechat
	Smscode   string `json:"smscode" validate:"required"`    //手機驗證碼
}

type ChangePayPwdReq struct {
	Smscode string `json:"smscode" validate:"required"`          //手機驗證碼
	Pwd     string `json:"pwd" validate:"required,min=6,max=18"` //新密碼
}

type GetFansReq struct {
	PageParam
}

type GetFansResp struct {
	models_main.AnchorFans
	Fan *Anchor `json:"fan"`
}

type AddAddressReq struct {
	Id       int    `json:"id"`
	Province string `json:"province" validate:"required"`  //省
	City     string `json:"city"  validate:"required"`     //市
	District string `json:"district"  validate:"required"` //地區
	Address  string `json:"address" validate:"required"`   //具體地址
	Name     string `json:"name"  validate:"required"`     //收貨人
	Mobile   string `json:"mobile"  validate:"required"`   //手機號
}

type GetAddressResp AddAddressReq

type VerifyTokenReq struct {
	Token    string `json:"token" validate:"required"`
	Uid      int    `json:"uid" validate:"required"`
	Platform int    `json:"platform"`
}

type UserAsset struct {
	Diamond               int `json:"diamond"`                  // 余额
	ProfitDiamond         int `json:"profit_diamond"`           // 可提现
	TotalWithdraw         int `json:"total_withdraw"`           // 累计提现
	IssetPassword         int `json:"isset_passwrod"`           // 是否已设定密码
	IssetPayPassword      int `json:"isset_pay_password"`       // 是否已设定支付密码
	IsbindBankCard        int `json:"isbind_bank_card"`         // 是否绑定银行卡
	IsUnderReviewNickname int `json:"is_under_review_nickname"` // 是否有昵称待审核中
	IsAnchor              int `json:"is_anchor"`                //是否是主播
	// IsVerified         int `json:"is_verified"`          	// 是否实名认证通过 审核状态0-待审核 1-已通过 2-已拒绝
}

type AnchorStatus struct {
	IsAnchor int `json:"is_anchor"` // 是否是主播｜0:否, 1:是
	ISLive   int `json:"is_live"`   // 0:未开播, 1:正在直播中
}

type UserBackPackRsp struct {
	Gid       int `json:"gid"`        //礼品id
	Num       int `json:"num"`        //数量
	PropsType int `json:"props_type"` //1挂件 2弹幕背景 3弹幕字体
}

type GetUserInfoSimplifiedResp struct {
	InviteCode  string `json:"invite_code"`  //邀请码
	Account     string `json:"account"`      //账号名
	NickName    string `json:"nick_name"`    //昵称
	Avatar      string `json:"avatar"`       //头像
	AttentCount uint32 `json:"attent_count"` //粉丝数
	FansCount   uint32 `json:"fans_count"`   //粉丝数
	GiftSpend   uint32 `json:"gift_spend"`   //送礼数
	Diamond     uint32 `json:"diamond"`      //diamond数量
	Mobile      string `json:"mobile"`       //电话号码
	Sex         uint32 `json:"sex"`          //性别，0=未知，1=男，2=女
	HasNotice   bool   `json:"has_notice"`   //有无未读消息
	Level
}

type UserReservationReq struct {
	MatchID   int    `json:"match_id" validate:"required"`
	SportType string `json:"sport_type"` //当场球赛类型   例:football,basket,tennis
}

type CancelReservationByMatchIdAndUserIdReq struct {
	MatchID int `json:"match_id" validate:"required"` //赛事ID
}

type CancelReservationByMatchIdAndUserIdResp struct {
	IsSuccess bool `json:"is_success"` //是否成功
}

type UserFeedbackReq struct {
	Title   string `json:"title" validate:"required"`   //varchar(30) DEFAULT NULL COMMENT '标题',
	Content string `json:"content" validate:"required"` //varchar(300) DEFAULT NULL COMMENT '内容',
}

type ProfileRequest struct {
	NickName string `json:"nickname" validate:"required"`
	SmsCode  string `json:"sms_code" validate:"required"`
}

type Level struct {
	Level        uint8  `json:"level"`         //用户当前等级
	Point        uint32 `json:"point"`         //用户总经验值
	UpgradePoint uint32 `json:"upgrade_point"` //升级所需总经验值
	Process      uint32 `json:"process"`       //当前等级阶梯下,经验进度
	Difference   uint32 `json:"difference"`    //当前等级与上一个等级规则阶梯差值
	Remainder    uint32 `json:"remainder"`     //升级所需经验值
}

type User struct {
	Id              int        `json:"id"`
	Token           string     `json:"token"`     //varchar(255) DEFAULT NULL,
	TokenWeb        string     `json:"token_web"` //varchar(255) DEFAULT NULL,
	NickName        string     `json:"nick_name"` //varchar(255) DEFAULT NULL,
	Account         string     `json:"account"`   //varchar(255) DEFAULT '',
	Password        string     `json:"-"`         //varchar(255) DEFAULT NULL,
	Mobile          string     `json:"mobile"`
	WxUnionid       string     `json:"-"`                 //varchar(255) DEFAULT NULL COMMENT '微信unionid'
	QqUnionid       string     `json:"-"`                 //varchar(255) DEFAULT NULL COMMENT 'QQ unionid'
	OnlineStatus    int        `json:"online_status"`     //int(1) DEFAULT '9' COMMENT '1-在线 2-进入后台（离开）3-通话中 9-离线'
	Avatar          string     `json:"avatar"`            //varchar(255) DEFAULT NULL COMMENT '头像地址'
	Gold            int        `json:"gold"`              //int(10) DEFAULT '0' COMMENT '鹰钻数量'
	Diamond         int        `json:"diamond"`           //int(10) DEFAULT '0' COMMENT '克拉数量'
	DiamondTotal    int        `json:"diamond_total"`     //int(10) DEFAULT '0' COMMENT '累计克拉数量'
	Tags            string     `json:"-"`                 //varchar(255) DEFAULT NULL COMMENT '标签数组'
	Point           int        `json:"point"`             //int(10) DEFAULT '0' COMMENT '经验值'
	AnchorPoint     int        `json:"anchor_point"`      //int(10) DEFAULT '0' COMMENT '主播经验值'
	IsAnchor        int        `json:"is_anchor"`         //int(1) DEFAULT '0' COMMENT '是否主播 1-是'
	Status          int        `json:"status"`            //int(1) DEFAULT '0' COMMENT '0-正常 1封禁'
	SharingRatio    int        `json:"sharing_ratio"`     //int(3) DEFAULT '40' COMMENT '分成比例 %'
	GuildId         int        `json:"guild_id"`          //int(10) DEFAULT '0' COMMENT '所属公会id'
	Agentid         int        `json:"agentid"`           //int(10) DEFAULT '0' COMMENT '上级代理id'
	RecWeight       int        `json:"rec_weight"`        //int(10) DEFAULT '0' COMMENT '推广权重0-100'
	CallReciveCount int        `json:"call_recive_count"` //int(10) DEFAULT '0' COMMENT '收到通话请求次数'
	CallAcceptCount int        `json:"call_accept_count"` //int(10) DEFAULT '0' COMMENT '接受通话请求次数'
	AuthTime        *time.Time `json:"auth_time"`         //datetime DEFAULT NULL COMMENT '完成实名认证时间'
	RegistTime      time.Time  `json:"regist_time"`       //datetime DEFAULT NULL,
	RegistIp        string     `json:"regist_ip"`
	RegistType      int        `json:"regist_type"`    //int(2) DEFAULT NULL COMMENT '注册来源 0 后台 1 WEB 2 IOS 3 Android.'
	LastLogin       time.Time  `json:"last_login"`     //datetime DEFAULT NULL,
	LastOnline      *time.Time `json:"last_online"`    //datetime DEFAULT NULL COMMENT '上次在线时间'
	LoginPlatform   int        `json:"login_platform"` //int(1) DEFAULT '0' COMMENT '0-Web 1-iOS 2-Android'
	PayPassword     string     `json:"pay_password"`   //varchar(255) DEFAULT NULL COMMENT '支付密碼',
	LastIp          string     `json:"last_ip"`
	ProfitDiamond   int        `json:"profit_diamond"`    //int(10) DEFAULT '0' COMMENT '直播得克拉'
	Referrer        string     `gorm:"-" json:"referrer"` // 来自推荐人的推荐码
	ReadTime        time.Time  `json:"read_time"`         //最后一次阅读系统消息的时间
	Hot             int        `gorm:"-" json:"hot"`
	IsSubscription  int        `gorm:"-" json:"is_subscription"` //当前用户是否关注
	AnchorType      int
	NobleExpiration time.Time `gorm:"-"`
	NobleId         uint8     `gorm:"-" `
}

type UserCacheInfo struct {
	NickName    string `json:"nick_name"`
	Avatar      string `json:"avatar"`
	Level       int    `json:"level"`
	Vip         int    `json:"vip"`
	Advertising string `json:"advertising"` //广告词
}

type GetInviteInfoResp struct {
	InviteCode       string         `json:"invite_code"`        //邀请码
	Diamond          uint           `json:"diamond"`            //可领取钻石
	WithDrawnDiamond uint           `json:"with_drawn_diamond"` //已领取钻石
	InvitedUserList  []*InvitedUser `json:"invited_user_list"`  //被当前用户邀请的用户信息
}

type InvitedUser struct {
	Avatar   string `json:"avatar"`
	NickName string `json:"nick_name"`
}

type DeactiveReq struct {
	Recall int32 `json:"recall"` //0:注销 1:撤回
}
type ForgetPwdHashReq struct {
	Mobile     string `json:"mobile" validate:"required"`           //手機號
	Pwd        string `json:"pwd" validate:"required,min=6,max=18"` //新密碼
	MobileHash string `json:"mobile_hash" validate:"required"`      //驗證碼
}
type FastLoginReq struct {
	Mobile        string `json:"mobile" validate:"required"`               //手機號
	TNow          int64  `json:"t_now" validate:"required"`                //当前timestamp
	Key           string `json:"key" validate:"required"`                  //生成的key
	LoginPlatform int    `json:"platform" validate:"required"`             // web-0; ios-1; android-2
	Ip            string `protobuf:"bytes,5,opt,name=ip,proto3" json:"ip"` //IP地址
	SourceKey     string `json:"source_key"`                               //登陆来源, string
	Website       string `json:"website"`
}

type BindAccountReq struct {
	Account string `json:"account" validate:"required"` //绑定的6T账号
}

type CheckBindAccountResp struct {
	IsBind  bool   `json:"is_bind"` //是否绑定 0:未绑定 1:绑定
	Account string `json:"account"` //绑定的6t账号
	Uid     int    `json:"uid"`     //当前用户ID
}
